FAA 1462 Pareja 10. Práctica 2 K-NN y K-MEANS

Kevin de la Coba Malam

En este documento se mostraran los resultados del clasificador K-NN usando diferentes K. También se hará una análisis del algoritmo K-Means con el dataset nums.csv.

Para no hacer el documento muy extenso se han implementado las funciones de test en un archivo llamado utils.py.

En está practica, se han usado ambos tipos de validaciones, cruzada y simple. En concreto, con la validación cruzada se usan los valores K: 4, 6, 8, 10. Para la validación simple se usán valores para el %: 25, 20, 15, 10.

Para evitar empates con los datos, los valores que se usan en el clasificador K-NN son siempre impares.

1. Resulatados K-NN (Implementación propia)

En este apartado se mostrarán tablas en las cuales se puede apreciar el resultado de la clasificación de los diferentes conjuntos de datos.

K-NN Tests sin normalizar

K-NN Tests normalizados

Pima-Indians-Diabetes - Validación Simple

En un primer vistazo a los datos, podemos asumir que la normalización de los datos no influye en gran medida al error del clasificador. Una de las razones de esto puede ser simplemente que la normalización no es necesaria ya que los propios datos no necesiten ser normalizados. También podemos ver que los valores para diferentes porcentajes de la validación simple no influyen en gran medida, ya que el error está siempre entre 0.32 y 0.39.

En cuanto a K, se ven picos cuando K es extremadamente pequeño (con valores 1 y 3) pero mientras aumentamos K podemos ver el error se "estabiliza" quedandose entre los 0.32 y 0.36. La cosa es que a medida que aumenta, no se aprecia una gran mejora, es por eso que los valores donde mejor clasifica el modelo están entre K=3 y K=7, aunque se pueden ver errores bajos cuando K está entre K=11 y K=15.

Pima-Indians-Diabetes - Validación Cruzada

La validación cruzada presenta un comportamiento extraño y es que el error no varía independientemente del valor de K, es cierto que hay un pico en K=1, pero a parte de eso, no hay ningún cambio. Todo esto cambia cuando se usa un valor de K (con respecto a la validación cruzada) de 10, ahí los errores si que varían.

De estás gráficas podemos llegar a la conclusión de que el normalizar el dataset Pima-Indians-Diabetes no es quizás la mejor idea, ya que devuevle el mismo resulatdo que sin normalizar.

Semi-conclusión. Dataset Pima-Indians-Diabetes

No resulta buena idea normalizar los datos y usar la validación cruzada para comparar los errores con respecto al valor de K tampoco es la mejor idea.

Lo que si que podemos decir es que usar K=1 (con respecto a K-NN) no tiene ningún sentido y esto se puede ver en las tablas, el error suele ser alto. Los valores donde el modelo mejor clasifica están entre 3-7 y 11-15.

WDBC - Validación Simple

WDBC - Validación Cruzada

En este dataset podemos ver que ocurren cosas muy similares a las que ocurren en el anterior dataset. Lo primero es que el error es muy parecido aunque ligeramente superior, 0.36-0.38.

En la validación cruzada no ocurre lo mismo que antes pero siguen pasando cosas raras, vemos que en 2 gráficas, los valores del error, unicaménte varian entre 2 posibles valores. En las otras 2 gráficas vemos variación aunque, como se dijo anteriormente, el hecho de usar la normalización no implica ninguna mejora.

En cuanto a los valores de K, estos dan un mejor resultado cuando están entre K=11 y K=17.

Conclusión

2. K-Means (Implementación propia). K = 10

En este apartado vamos a ver el comportamiento de K-Means sobre el dataset nums. Vamos a ver la matriz de confusión generada para cada cluster, para esto se usarán histogramas para verlo de forma más visual.

Hay que tener en cuenta que en este dataset tenemos números del 0 al 9. En el mejor de los casos los clusters tendrían datos de un único tipo y no habría ni falsos positivos, ni falsos negativos.

Los clusters contienen una clase mayoritaria, esa clase se considerá la clase del cluster.

KMeans - 10 Clusters - Histogramas

Lo primero que vemos dados los datos es que no hay ningún cluster cuya clase mayoritaria sea el 5. Esto puede ser porque el 5 se parezca mucho a otro número y en otro cluster haya falsos positivos que sean 5.

El hecho de que no esté el 5 como clase mayoritaria en ningún cluster significa que hay otro número que se parezca a este que en 2 clusters sea la clase mayoritaria, este número es el 7. El número 7 está en los clusters 2 y 5. Podemos suponer que uno de estos contiene varios falsos positivos, aunque también pueden estar repartidos entre los mismos clusters. Sorprendentemente hay clusters como el 6 que tienen bastantes más falsos positivos que los clusters 2 y 5, esto puede ser porque no haya tantos 3's y 5's en el dataset, mientras que el número 1 (clase mayoritaria del cluster 10), esté muy presente en el dataset.

Aunque no haya varios falsos positivos, lo que si que hay son muy pocos verdaderos positivos en el cluster 2, unicamente 7, este es un número muy bajo.

En cuanto a la matriz de confusión, se va a discutir cada uno de los valores (verdadero positivo, verdadero...):

Al fijarnos unicamente en un dato de la matriz no es correcto llegar a una conclusión de cada número, se hace unicamente de manera orientativa.

Conclusión

Aunque haya 10 números en el dataset, es necesario que la cantidad de cada uno de estos sea uniforme para que quizás, el algoritmo de K-Means haga clusters los cuales contengan un número diferente cada uno.

Hay que tener en cuenta que cada ejecución que se hace, se cambian los valores y puede pasar que todos estos números cambien.

3. K-Means (Implementación propia). K > 10 y K <= 20

Vamos ahora a "clusterizar" el dataset con valores mayores de 10. Lo ideal sería que se arreglase el problema de la ausencia del 5 como clase mayoritaria en uno de los clusters.

KMeans - 11 Clusters - Histogramas

KMeans - 12 Clusters - Histogramas

Finalmente se reconoce el 5.

KMeans - 13 Clusters - Histogramas

KMeans - 14 Clusters - Histogramas

KMeans - 15 Clusters - Histogramas

KMeans - 16 Clusters - Histogramas

Sorprendentemente aunque haya más clusters lo que sucede es que se repiten más números, provocando así que haya otros que no se reconozcan. En este caso el 8 se repite en 3 clusters.

KMeans - 17 Clusters - Histogramas

KMeans - 18 Clusters - Histogramas

KMeans - 19 Clusters - Histogramas

KMeans - 20 Clusters - Histogramas

Conclusión

Se puede ver que aunque se aumente el número de clusters, esto no significa que se vayan a reconocer todos los números. Por ejemplo el número 5 es un número que no siempre se reconoce. Lo que se sucede es que hay números que aparecen más, como por ejemplo 0. Cuando usamos 10 clusters era más común ver que solo se repetía un número en un único cluster, bien, pues ahora eso no sucede. Hay casos en los que incluso un número se llega a repetir en 3 clusters distintos.

Podemos decir que, aumentar el número de clusters no implica que todos los números vayan a tener un cluster asociado, todo lo contrario, nos daríamos cuenta de que hay números "egoístas" que aparecen en varios clusters.

4. Comparación de resultados

Se van ahora a comparar los resultados de nuestra implementación con los de la librería SKLearn.

K-NN SKLearn

Pima-Indians-Diabetes - Validación Simple

Pima-Indians-Diabetes - Validación Cruzada

WDBC - Validación Simple

WDBC - Validación Cruzada

A la primera conclusión a la que podemos llegar es que normalizar los datos empeora drásticamente el error cometido por el modelo. En estos gráficos si podemos ver una clara diferencia entre la normalización y la no-normalización.

En cuanto al valor de K, el punto más alto del error suele estár con K=1. También dependiendo del dataset, los valores optimos de K están entre 5-11 (en el caso de Pima-Indians-Diabetes) y 3-7 (en el caso de WDBC, aunque el error es muy uniforme).

SKLearn VS Implementación Propia - KNN - Pima-Indians-Diabetes

SKLearn VS Implementación Propia - KNN - WDBC

Viendo los datos mostrados en las gráficas vemos que el clasificador de la librería SKLearn comete menos errores aunque, cuando se tratan datos normalizados la tasa de error es más pareja al modelo implementado en la práctica. En el dataset WDBC el error sigue siendo menor que el error en el modelo propio.

KMeans - SKLearn - 10 Clusters

SKLearn VS Implementación Propia - KMeans - 10 Clusters

KMeans - SKLearn - 20 Clusters

SKLearn VS Implementación Propia - KMeans - 20 Clusters

En estos histogramas se muestran los valores de cada parte de la matriz de confusión pero de ambas partes, de la implementación propia y de la implementación de la libreria de SKLearn.

El resultado tras ejecutar el algoritmo no siempre es el mismo por lo que no sería correcto fijarse unicamente en los gráficos mostrados. Aun así, los resultados resultan bastante parejos en los clusters que comparten clase mayoritaría. También es cierto que hay clases que solo uno de los dos reconoce.

No me atrvería a decir que una es mejor que la otra, simplemente diría que el resultado es similar aunque el tiempo de ejecución es bastante mejor en el clasificador de SKLearn.

Conclusión Final

Podemos concluir que el clasificador K-NN no tiene un K especifico donde se comporte mejor, depende de los datos, pero si podemos decir que valores como 1, no son útiles. La normalización de los datos no es la mejor idea ya que no presenta una mejora en el error.

También podemos decir que la validación cruzada (al menos en mi caso) no es la mejor opción para comprobar el comportamiento de K-NN.

En cuanto a K-Means, hemos visto que no siempre se van a reconocer todas las clases aunque K sea igual al número de clases, y que hacer K > nº de clases puede dar resultados peores ya que hay clases "egoistas" que abarcan más clusters.

Finalmente, hemos visto que la implementación de K-NN de SKLearn, si que tiene un comportamiento diferente cuando se pasan datos normalizados. Cuando se hace esto los resultados son peores. La implementación de SKLearn es mejor en general (en cuanto a tiempo y errores por lo menos).

La implementación de K-Means en SKLearn no tiene nada que envidiarle a la implementación propia, aunque es cierto que es superior en cuanto al coste temporal. Los resultados de ambas implementaciones son muy parejos.